/*
 * ----------------------------------------------------------------------------
Wilo Eco 2 X-19188 Holtek HT1621
 */

#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <avr/pgmspace.h>

// PORTD
   
#define RXD	0
#define TXD	1
#define WR  2
#define Data 3
#define BL 4
#define CS	5
#define RD	6

#define PIEZO 7

// PORTB

#define ENC_A		1
#define ENC_B		0
#define ENC_BUTTON	2


#define CURRENT_LOW  3
#define CURRENT_HIGH 4

#define LED1	2
#define LED2	4
#define LED3	8
#define LED4	16
#define LED5	32

#define SetBit(PORT,BIT) (PORT |= (1<<BIT)) 
#define ClrBit(PORT,BIT) (PORT &= ~(1<<BIT))

void Led(uint8_t b)
{
	PORTC = (PORTC & 0b11100001) | (b & 0b00011110);
	DDRC  = 0b00111110;
}

void Piep(uint16_t hoehe, uint16_t dauer)
{
	for(uint16_t i = 0; i < 10*(dauer/hoehe); i++)
	{
		SetBit(PORTD,PIEZO);
		_delay_us(5*hoehe);
		ClrBit(PORTD,PIEZO);
		_delay_us(5*hoehe);
	}
}



//********************************************************************************

void Clock(void)
{
   ClrBit(PORTD,WR);
   //_delay_us(1);
   asm("nop");
   SetBit(PORTD,WR);
   //_delay_us(1);
   asm("nop");
}

//********************************************************************************


void SendCommand(uint8_t b)
{
   uint8_t i;

   ClrBit(PORTD,CS);                    // /CS = LOW 
   SetBit(PORTD,Data);
   Clock();
   ClrBit(PORTD,Data);
   Clock();
   ClrBit(PORTD,Data);
   Clock();
   for(i=0;i<=7;i++)
   {
      if ((b & (128 >> i)) != 0) SetBit(PORTD,Data);
      else                        ClrBit(PORTD,Data);
      Clock();
   }
   ClrBit(PORTD,Data);
   Clock();
   SetBit(PORTD,CS);
   
   _delay_ms(5);
}

//********************************************************************************

void SendData(uint8_t adr, uint8_t b)
{
   uint8_t i;

   ClrBit(PORTD,CS);                   // /CS = LOW 
   SetBit(PORTD,Data);                 // 1 
   Clock();
   ClrBit(PORTD,Data);                  // 0 
   Clock();
   SetBit(PORTD,Data);                  // 1 
   Clock();
   for(i=0;i<=5;i++)
   {
      if ((adr & (32 >> i)) != 0) 
		SetBit(PORTD,Data);
      else 
		ClrBit(PORTD,Data);
      Clock();
   }
   for(i=0;i<=3;i++)
   {
      if ((b & (1 << i)) != 0) 
		SetBit(PORTD,Data);
      else                           
		ClrBit(PORTD,Data);
      Clock();
   }
   SetBit(PORTD,CS);
   //_delay_ms(5);
}

//********************************************************************************

void Clear(void)
{
   uint8_t i;

   for(i=0;i<=31;i++)
      SendData(i,0);
}

//********************************************************************************

void Full(void)
{
	uint8_t i;

	for(i=0;i<=31;i++)
		SendData(i,0xff);
}

//********************************************************************************
void Bild1(void)
{
   SendData(0,7);
   SendData(1,13);
   
   SendData(2,7);
   SendData(3,13);
   
   SendData(4,7);
   SendData(5,13);
   
   SendData(6,7);
   SendData(7,13);
   
   SendData(8,11);
   SendData(9,15);
   
   SendData(10,7);
   SendData(11,13);
   
   SendData(12,7);
   SendData(13,13);
   
   SendData(14,7);
   SendData(15,13);
   
   SendData(16,7);
   SendData(17,13);
   
   //Symbole
   SendData(18,0);
   SendData(19,0);
   SendData(20,0);
   SendData(21,0);
   SendData(22,0);
   SendData(23,0);
   
   SendData(24,0);   
}

//********************************************************************************
void Bild2(void)
{
	
   SendData(0,14);
   SendData(1,0);
   
   SendData(2,6);
   SendData(3,0);
   
   SendData(4,6);
   SendData(5,0);
   
   SendData(6,14);
   SendData(7,0);
   
   SendData(8,10);
   SendData(9,0);
   
   SendData(10,6);
   SendData(11,0);
   
   SendData(12,14);
   SendData(13,0);
   
   SendData(14,6);
   SendData(15,0);
   
   SendData(16,6);
   SendData(17,0);
   
   
   //Symbole
   SendData(18,0);
   SendData(19,0);
   SendData(20,0);
   SendData(21,0);
   SendData(22,0);
   SendData(23,0);
   SendData(24,0);   
}

//********************************************************************************

void Bild3(void)
{
   SendData(0,3);
   SendData(1,14);
   
   SendData(2,3);
   SendData(3,14);
   
   SendData(4,3);
   SendData(5,14);
   
   SendData(6,3);
   SendData(7,14);
   
   SendData(8,7);
   SendData(9,12);
   
   SendData(10,3);
   SendData(11,14);
   
   SendData(12,11);
   SendData(13,14);
   
   SendData(14,3);
   SendData(15,14);
   
   SendData(16,3);
   SendData(17,14);
   
   //Symbole
   SendData(18,0);
   SendData(19,0);
   SendData(20,0);
   SendData(21,0);
   SendData(22,0);
   SendData(23,0);
   SendData(24,0);   
}
//********************************************************************************

void Bild4(void)
{
   SendData(0,5+8);
   SendData(1,11);
   
   SendData(2,5);
   SendData(3,11);
   
   SendData(4,5);
   SendData(5,11);
   
   SendData(6,5+8);
   SendData(7,11);
   
   SendData(8,13);
   SendData(9,9);
   
   SendData(10,5);
   SendData(11,11);
   
   SendData(12,5);
   SendData(13,11);
   
   SendData(14,5);
   SendData(15,11);
   
   SendData(16,5);
   SendData(17,11);
   
   //Symbole
//   SendData(2,0);
//   SendData(10,0);
   SendData(18,0);
   SendData(19,0);
   SendData(20,0);
   SendData(21,0);
   SendData(22,0);
   SendData(23,0);
   SendData(24,0);   
}

//********************************************************************************

void Bild5(void)
{
   SendData(0,0);
   SendData(1,0);
   
   SendData(2,0);
   SendData(3,0);
   
   SendData(4,0);
   SendData(5,0);
   
   SendData(6,0);
   SendData(7,0);
   
   SendData(8,0);
   SendData(9,0);
   
   SendData(10,0);
   SendData(11,0);
   
   SendData(12,0);
   SendData(13,0);
   
   SendData(14,0);
   SendData(15,0);
   
   SendData(16,0);
   SendData(17,0);
   
   //Symbole
   SendData(2,8);
   SendData(10,8);
   SendData(14,8);
   SendData(16,8);
   SendData(18,1);
   SendData(19,1);
   SendData(20,1);
   SendData(21,1);
   SendData(22,0);
   SendData(23,2);
   SendData(24,1);   
}

//********************************************************************************

void Bild6(void)
{
   SendData(0,0);
   SendData(1,0);
   
   SendData(2,0);
   SendData(3,0);
   
   SendData(4,0);
   SendData(5,0);
   
   SendData(6,0);
   SendData(7,0);
   
   SendData(8,0);
   SendData(9,0);
   
   SendData(10,0);
   SendData(11,0);
   
   SendData(12,0);
   SendData(13,0);
   
   SendData(14,0);
   SendData(15,0);
   
   SendData(16,0);
   SendData(17,0);
   
   //Symbole
   SendData(2,8);
   SendData(10,8);
   SendData(14,8);
   SendData(16,8);
   SendData(18,1);
   SendData(19,1+8);
   SendData(20,1+8);
   SendData(21,1+2);
   SendData(22,4);
   SendData(23,2+1);
   SendData(24,1+2);   
}

//********************************************************************************

void Bild7(void)
{
   SendData(0,0);
   SendData(1,0);
   
   SendData(2,0);
   SendData(3,0);
   
   SendData(4,0);
   SendData(5,0);
   
   SendData(6,0);
   SendData(7,0);
   
   SendData(8,0);
   SendData(9,0);
   
   SendData(10,0);
   SendData(11,0);
   
   SendData(12,0);
   SendData(13,0);
   
   SendData(14,0);
   SendData(15,0);
   
   SendData(16,0);
   SendData(17,0);
   
   //Symbole
   SendData(2,8);
   SendData(10,8);
   SendData(14,8);
   SendData(16,8);
   SendData(18,1);
   SendData(19,1+2);
   SendData(20,1+2);
   SendData(21,1+4);
   SendData(22,2);
   SendData(23,2+8);
   SendData(24,1+4);      
}

//********************************************************************************

void Bild8(void)
{
   SendData(0,15);
   SendData(1,15);
   
   SendData(2,15);
   SendData(3,15);
   
   SendData(4,0);
   SendData(5,0);
   
   SendData(6,0);
   SendData(7,0);
   
   SendData(8,0);
   SendData(9,0);
   
   SendData(10,0);
   SendData(11,0);
   
   SendData(12,0);
   SendData(13,0);
   
   SendData(14,0);
   SendData(15,0);
   
   SendData(16,0);
   SendData(17,0);
   
   //Symbole
//   SendData(2,8);
   SendData(10,8);
   SendData(14,8);
   SendData(16,8);
   SendData(18,1);
   SendData(19,1+4);
   SendData(20,1+4);
   SendData(21,1+8);
   SendData(22,2+4);
   SendData(23,2+4+1);
   SendData(24,1+8);         
}

void Bild9(void)
{
   SendData(0,0);
   SendData(1,0);
   
   SendData(2,0x01+0x02);
   SendData(3,0);
   
   SendData(4,0);
   SendData(5,0x04);		// li ob
   
   SendData(6,0x04);		// li ob
   SendData(7,0);
   
   SendData(8,0x00);
   SendData(9,0x02);
   
   SendData(10,0xff);	//leer
   SendData(11,0x00);
   
   SendData(12,0x00);
   SendData(13,0x02);		// re un
   
   SendData(14,0);
   SendData(15,0);
   
   SendData(16,0);
   SendData(17,0);
   
   //Symbole
//   SendData(2,8);
   SendData(10,0);
   SendData(14,0);
   SendData(16,0);
   SendData(18,0);
   SendData(19,0);
   SendData(20,0);
   SendData(21,0);
   SendData(22,0);
   SendData(23,0);
   SendData(24,0);   
}



void LCD_Marker(void)
{
  SendData(0,255);
  SendData(1,255);

  SendData(2,0);
  SendData(3,0);

  SendData(4,0);
  SendData(5,0);

  SendData(6,0);
  SendData(7,0);

  SendData(8,0x02+0x08);
  SendData(9,0);

  SendData(10,3);
  SendData(11,0);

  SendData(12,0);
  SendData(13,0);

  SendData(14,0);
  SendData(15,0);

  SendData(16,0x01);
  SendData(17,0x01);

  //Symbole
  //   SendData(2,8);

  SendData(18,0);
  SendData(19,0x02+0x04);
  SendData(20,0);
  SendData(21,0);
  SendData(22,0);
  SendData(23,0);
  SendData(24,0);  
}

void VisionBild1(void)
{
   for(uint8_t i = 0; i <= 24; i += 3)
   {
      SendData(i+0,0x49);
	  SendData(i+1,0x92);
	  SendData(i+2,0x24);
   }
}

void VisionBild2(void)
{
   for(uint8_t i = 0; i <= 24; i += 3)
   {
      SendData(i+0,0x92);
	  SendData(i+1,0x24);
	  SendData(i+2,0x49);
   }
}

void VisionBild3(void)
{
   for(uint8_t i = 0; i <= 24; i += 3)
   {
      SendData(i+0,0x24);
	  SendData(i+1,0x49);
	  SendData(i+2,0x24);
   }
}


//********************************************************************************

void Init(void)
{
   SetBit(PORTD,WR);                    // /WR = HI 
   SetBit(PORTD,RD);                    // /RD = HI 
   SendCommand(1);                // Turn on system oszillator 
// SendCommand(0x14);	           // Ext. Quarz 
   SendCommand(0x18);              // int. oszillator 
   SendCommand(3);                // Turn on BIAS generator 
   SendCommand(0x20+8+1);          // 1/3 Bias 1:4 Multiplex 
}


//********************************************************************************
// Zeug fuer Encoder
//********************************************************************************
#define PHASE_A		(PINB & _BV(ENC_A))		// Encoder an PortB,0
#define PHASE_B		(PINB & _BV(ENC_B))     // Encoder an PortB,1
 
volatile int8_t enc_delta;			// -128 ... 127
static int8_t last;
 
void encode_init( void )
{
  int8_t new;
 
  new = 0;
  if( PHASE_A )
    new = 3;
  if( PHASE_B )
    new ^= 1;					// convert gray to binary
  last = new;					// power on state
  enc_delta = 0;
  TCCR0 = _BV(CS01)|_BV(CS00);		// CTC, XTAL / 64
//  OCR0 = (uint8_t)(XTAL / 64.0 * 1e-3 - 0.5);	// 1ms
  TIMSK |= _BV(TOIE0);
}


uint8_t timer_counter;

ISR( TIMER0_OVF_vect )				// 1ms for manual movement
{
  int8_t new, diff;
 
  new = 0;
  if( PHASE_A )
    new = 3;
  if( PHASE_B )
    new ^= 1;					// convert gray to binary
  diff = last - new;				// difference last - new
  if( diff & 1 ){				// bit 0 = value (1)
    last = new;					// store new as next last
    enc_delta += (diff & 2) - 1;		// bit 1 = direction (+/-)
  }
  
  timer_counter++;
  if (timer_counter > 100) {
	timer_counter = 0;
	PORTC = PORTC ^ 0b00100000;		// Lebenszeichen
  }
}

int8_t encode_read2( void )			// read two step encoders
{
  int8_t val;
 
  cli();
  val = enc_delta;
  enc_delta = val & 1;
  sei();
  return val >> 1;
}

//********************************************************************************
// RS232 Zeug
//********************************************************************************
#ifndef F_CPU
  #warning "F_CPU war noch nicht definiert, wird nun nachgeholt mit 800000"
  #define F_CPU 800000UL    // Systemtakt in Hz
#endif
 
#define BAUD 9600UL          // Baudrate
 
// Berechnungen
#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1)   // clever runden
#define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1)))     // Reale Baudrate
#define BAUD_ERROR ((BAUD_REAL*1000)/BAUD) // Fehler in Promille, 1000 = kein Fehler.
 
#if ((BAUD_ERROR<990) || (BAUD_ERROR>1010))
  #error Systematischer Fehler der Baudrate gr�sser 1% und damit zu hoch! 
#endif

void serial_init(void)
{
    UCSRB |= _BV(TXEN)|_BV(RXEN);            	// UART TX & RX einschalten
    UCSRC |= _BV(URSEL)|_BV(UCSZ0)|_BV(UCSZ1);	// Asynchron 8N1 
 
    UBRRH = UBRR_VAL >> 8;
    UBRRL = UBRR_VAL & 0xFF;
}

void send_byte(uint8_t value)
{
    while (!(UCSRA & (1<<UDRE)))  /* warten bis Senden moeglich                   */
    {
    }
 
    UDR = value;                    /* schreibt das Zeichen x auf die Schnittstelle */
}

void send_zahl(uint16_t v) {
	send_byte(0x30+(v % 10000)/1000);
	send_byte(0x30+(v %  1000)/100);
	send_byte(0x30+(v %   100)/10);
	send_byte(0x30+(v %    10)/1);
	send_byte(0x0A);

	
}

uint8_t read_byte(void)
{
   // Warten bis Daten empfangen wurden 等待数据被接收
   if (UCSRA & (1<<RXC)) 
   {
      return UDR;
   } else {
      return 0;
   }
}

//********************************************************************************

int8_t GetTaster(void)
{
	// Return:
	//     0: keine Taste / keine �nderung 没有钥匙/没有变化
	//     1: Taste grd�ckt 按钮长大
	
	uint8_t key = 0;
	static uint8_t oldkey;	
	
	key = (~PINB) & 0x04;				// Tastenstatus einlesen 读取按键状态

	if (oldkey == key) return 0;		// nichts ge�ndert seit letzem mal -> ende 自上次以来没有任何变化->结束
	oldkey = key;
	
	if ((key & 0x04) != 0) return 1;	// Taster gedr�ckt	按下按钮
	
	return 0;
}

#define BL_ON  SetBit(PORTD,BL);

#define BL_OFF ClrBit(PORTD,BL);

uint16_t current;

void checkCurrent(void)
{
	ADCSR=(1<<ADEN)|(0<<ADPS0)|(1<<ADPS1)|(1<<ADPS2); // ADC eingeschaltet, 64 Bit Prescale
	ADMUX=(1<<REFS1)|(1<<REFS0)|0x06;
	
	current = 0;
	
	for (uint8_t i = 0; i < 4; i++) {
		ADCSR |= _BV(6);  // single conversion mode ein
		while((ADCSR & _BV(6)) !=0) ;  // warten bis konvertierung abgeschlosen
    	current += ADCW;
	}
	
	current = current / 16;
	//send_zahl(current);
}

//********************************************************************************


#define PR_BEGIN 0
#define PR_P1_BUTTON	PR_BEGIN + 5	// 4 x Taster
#define PR_P2_ENC_L		PR_P1_BUTTON+15
#define PR_P3_ENC_R		PR_P2_ENC_L +15
#define PR_P4_ENC_L		PR_P3_ENC_R +15
#define PR_P5_BUTTON 	PR_P4_ENC_L + 4


#define min_current 100			// 10mA
#define max_current 160			// 16mA
#define no_module_current 4		// 0,4mA


uint8_t pruefung = PR_BEGIN;

#define SERVOMAX 70

void setServo(uint16_t v)
{
	PORTC |= _BV(1);
	_delay_us(1200);
	for (uint16_t i = 0; i <= v; i++) _delay_us(10);
	PORTC &= ~_BV(1);
}

int main (void)
{
	uint8_t bild=0;
	int8_t key;
	
	uint16_t key_delay = 0;
	
    DDRB = 0x00;      	// PortB Eingang
	PORTB = 0xf0;
	DDRC = 0xff;
	PORTC = 0xff;
	DDRD = 0xfe;		// PortD ist Ausgang (Bit0 = RX)
	
	
/*DRB  = 0xff;
	DDRC  = 0x00;
	DDRD  = 0xff;
	
	for (;;) {
	   PORTB++;
	   PORTD++;
	}*/
	
	/*
	for(;;) {
		for (uint16_t i = 0; i < SERVOMAX; i++)
		{
			setServo(i);
			_delay_ms(5);
		}

		_delay_ms(1000);
		for (int i = SERVOMAX; i > 0; i--)
		{
			setServo(i);
			_delay_ms(5);
		}
		_delay_ms(1000);
		
	}
	*/
	
	Init();
	serial_init();
	encode_init();
	sei();

	//for (;;) { checkCurrent(); }

	Clear();


    for (;;) 
	{
		_delay_ms(10);
		
		// Stromverbrauch
		checkCurrent();
		
		if (current < no_module_current) {
			Led(0);	// Alle LEDs aus, kein Modul da!所有指示灯熄灭，那里没有模块！
			pruefung = 0;
			BL_ON;
		} else if (pruefung == PR_BEGIN) {
			pruefung++;
			BL_ON;
		}
		
		
		// Status LEDs
		if (pruefung == PR_BEGIN) 									    Led(0);		// Alle LED aus所有LED熄灭
		if ((pruefung > PR_BEGIN)      && (pruefung < PR_P1_BUTTON))	Led(LED1);		
		if ((pruefung >= PR_P1_BUTTON) && (pruefung < PR_P2_ENC_L))	Led(LED2);		
		if ((pruefung >= PR_P2_ENC_L)  && (pruefung < PR_P3_ENC_R))	Led(LED3);		
		if ((pruefung >= PR_P3_ENC_R)  && (pruefung < PR_P4_ENC_L))	Led(LED4);		
		if ((pruefung >= PR_P4_ENC_L)  && (pruefung < PR_P5_BUTTON))	Led(LED1 + LED2);		
		if ((pruefung >= PR_P5_BUTTON) && (pruefung < PR_P5_BUTTON+5))	Led(LED1 + LED3);		
		
		if (key_delay < 5000) key_delay++;
		
		if(GetTaster()) 
		{
			//Piep(50,100);
			BL_OFF;
			Init();
			Clear();
			bild=0;
			BL_ON;
			if ((pruefung > PR_BEGIN) && (pruefung < PR_P1_BUTTON )) { 
				_delay_ms(100);
				checkCurrent();
				//send_zahl(current);
				if (current > max_current) {
					Led(LED2+LED3);
					Piep(50,400);
					Piep(80,400);
					Piep(50,400);
					Piep(80,400);
					Piep(50,400);
					Piep(80,400);
					Piep(50,400);
					Piep(80,400);
					pruefung = 0;					
				}
				if (current < min_current) {
					Led(LED2+LED4);
					Piep(50,400);
					Piep(80,400);
					Piep(50,400);
					Piep(80,400);
					Piep(50,400);
					Piep(80,400);
					Piep(50,400);
					Piep(80,400);
					pruefung = 0;
				}
				pruefung++; 
			}
			if (pruefung == PR_P1_BUTTON) { 
				Piep(300,1000); 
				pruefung++; 
			}
			if ((pruefung >= PR_P4_ENC_L) && (pruefung < PR_P5_BUTTON)) { 
				pruefung++;
			}
			if ((pruefung == PR_P5_BUTTON)) { 
				Piep(400,2000); 
				Piep(200,2000); 
				Piep(100,2000); 
				pruefung = 0;
				send_byte(0x30);
			}
		}
		
		
		
		key = read_byte();
		
		if(key == '1') 
		{
			BL_ON;
			Init();
			VisionBild1();
		}
		
		if(key == '2') 
		{
		    BL_ON;
			Init();
			VisionBild2();
		}
		
		if(key == '3') 
		{
		    BL_ON;
			Init();
			VisionBild3();
		}
		
		if(key == '4') // Good
		{
		    BL_ON;
			Init();
			LCD_Marker();
			for(uint8_t i = 0; i < 100; i++) Piep(350-i*3-(i*8)%50,150);
		}
		
		if(key == '8') // Good / Salmson
		{
		    BL_ON;
			Init();
			Bild9();
			for(uint8_t i = 0; i < 100; i++) Piep(350-i*3-(i*8)%50,150);
		}
		
		
		if(key == '5') // Bad
		{
		    BL_ON;
			Init();
			Bild2();
			for(uint8_t i = 0; i < 100; i++) Piep(100+i*8,400);
		}
		
		
		
		key = encode_read2();
		
		if ((key == 1) || (key == -1))
		{
			/*
			key_delay = 0;
			
			if (key_delay < 2) {
					pruefung = 0;
					Piep(50,200);			
					_delay_ms(100);
					Piep(50,200);			
					_delay_ms(100);
					Piep(50,200);			
			}
			*/
			
			bild += key;
			
			//Piep(50,200);
			if ((pruefung > PR_P1_BUTTON) && (pruefung < PR_P2_ENC_L)) {
				if (key == 1) pruefung++;
				if ((key == -1) && (pruefung >PR_P1_BUTTON+1)) {
					pruefung = 0;
					Piep(1000,2000);
				}
				if (pruefung == PR_P2_ENC_L) Piep(400,1000);
				if (key_delay < 2) {
					pruefung = 0;
					Piep(50,200);			
					_delay_ms(100);
					Piep(50,200);			
					_delay_ms(100);
					Piep(50,200);			
				}				
			}
			if ((pruefung >=PR_P2_ENC_L) && (pruefung < PR_P3_ENC_R)) {
				if (key == -1) pruefung++;
				if ((key == 1) && (pruefung >PR_P2_ENC_L)) {
					pruefung = 0;
					Piep(1000,2000);
				}		
				if (pruefung == PR_P3_ENC_R) Piep(400,1000);
				if ((key_delay < 2) && (pruefung >PR_P2_ENC_L)) {
					pruefung = 0;
					Piep(50,200);			
					_delay_ms(100);
					Piep(50,200);			
					_delay_ms(100);
					Piep(50,200);			
				}					
			}
			if ((pruefung >=PR_P3_ENC_R) && (pruefung < PR_P4_ENC_L)) {
				if (key == 1) pruefung++;
				if ((key == -1) && (pruefung > PR_P3_ENC_R)) {
					pruefung = 0;
					Piep(1000,2000);
				}
				if (pruefung == PR_P4_ENC_L) Piep(400,5000);
				if ((key_delay < 2) && (pruefung >PR_P3_ENC_R)) {
					pruefung = 0;
					Piep(50,200);			
					_delay_ms(100);
					Piep(50,200);			
					_delay_ms(100);
					Piep(50,200);			
				}					
			}
			

			if (bild > 14)  bild = 1;
			if (bild < 1)  bild = 14;
			
			//send_byte(bild+'0');
			
			switch(bild)
			{
				case 1:  { Bild1(); break;}
				case 2:  { Bild2(); break;}
				case 3:  { Bild3(); break;}
				case 4:  { Bild4(); break;}
				case 5:  { Bild5(); break;}
				case 6:  { Bild6(); break;}
				case 7:  { Bild7(); break;}
				case 8:  { Bild8(); break;}
				case 9:  { Bild9(); break;}
				case 10:   { VisionBild1(); break;}				
				case 11:  { VisionBild2(); break;}				
				case 12:  { VisionBild3(); break;}				
				case 13:  { Full(); break;}
				case 14:  { LCD_Marker(); break;}
			}
			
			key_delay = 0;
		}
	}


    return (0);
}
